package tas.java;

import java.util.regex.Pattern;

public final class Valida {

    // texto latino: A-Z, a-z, ÁÉÍÓÚÑáéíóúñ, space
    public static boolean esLatino(String texto) {
        String erTexto = "^[A-Za-zÁÉÍÓÚÑáéíóúñ\\s]{1,}$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // frase latina: A-Z, a-z, 0-9, _, space, ÁÉÍÓÚÑáéíóúñ¿?¡!%#
    public static boolean esFrase(String texto) {
        String erTexto = "^[\\w\\sÁÉÍÓÚÑáéíóúñ¿\\x3F¡\\x21\\x25\\x23]{1,}$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // fecha: dd/mm/aaaa
    public static boolean esFecha(String texto) {
        String erTexto = "^[0123]\\d\\/[01]\\d\\/[12]\\d{3}$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // hora: 00:00:00 a 23:59:59
    public static boolean esHora(String texto) {
        String erTexto = "^[012]\\d:[0-5]\\d:[0-5]\\d$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // fecha: dd/mm/aaaa hh:mm:ss
    public static boolean esDiaHora(String texto) {
        String erTexto = "^[0123]\\d\\/[01]\\d\\/[12]\\d{3}\\s[012]\\d:[0-5]\\d:[0-5]\\d$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // correo electrónico
    public static boolean esCorreo(String texto) {
        String erTexto = "(^[0-9a-zA-Z]+(?:[._][0-9a-zA-Z]+)*)@([0-9a-zA-Z]+(?:[._-][0-9a-zA-Z]+)*\\.[0-9a-zA-Z]{2,3})$";
        texto = (texto == null) ? "" : texto;

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // Entre 8 y 10 caracteres, por lo menos un digito y un alfanumérico, y no puede contener caracteres espaciales
    public static boolean esPassword(String texto) {
        String erTexto = "(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{3,10})$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // uno o más digitos enteros (\d+), puede haber punto (\.?) y ninguno o varios dígitos decimales (\d*$)
    public static boolean esReal(String texto) {
        String erTexto = "^\\d+\\.?\\d*$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // primer digito [1-9] y luego ninguno o varios dígitos
    public static boolean esEntero(String texto) {
        String erTexto = "^[1-9]\\d*$";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // entero: de 1 a N digitos
    public static boolean esEntero(String texto, int ctosdig) {
        String erTexto = "^[1-9]";

        if (ctosdig > 1) {
            erTexto += "\\d{1," + (ctosdig - 1) + "}$";
        }

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    // obliga a ingresar caracteres entre [min, max]
    public static boolean nCaracteres(String texto, int min, int max) {
        String erTexto = ".{" + min + "," + max + "}";

        boolean ok = Pattern.matches(erTexto, texto);
        return ok;
    }

    public String valHorMin(String hora, String min, String textoIdentificador) {
        Integer horax = null;
        Integer minx = null;
        String error = "";

        if ((hora != null) && (hora.trim().length() > 0)) {
            try {
                horax = Integer.valueOf(hora);

                if (horax < 0) {
                    error += "<li>Hora NO puede ser negativo " + textoIdentificador + "</li>";
                }

            } catch (NumberFormatException e) {
                error += "<li>Hora debe ser Valor Entero " + textoIdentificador + "</li>";

            }
        } else {
            error += "<li>Debe enviar hora " + textoIdentificador + "</li>";
        }

        if ((min != null) && (min.trim().length() > 0)) {
            try {
                minx = Integer.valueOf(min);
                
                 if (minx < 0) {
                    error += "<li>Minuto NO puede ser negativo " + textoIdentificador + "</li>";
                }
                
            } catch (NumberFormatException e) {
                error += "<li>Minutos debe ser Valor Entero " + textoIdentificador + "</li>";

            }
        } else {
            error += "<li>Debe enviar minutos " + textoIdentificador + "</li>";
        }

        return error;
    }

}
